package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.constant.RedisConstant;
import com.itheima.dao.CheckGroupDao;
import com.itheima.dao.CheckitemDao;
import com.itheima.dao.SetmealDao;
import com.itheima.entity.PageResult;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.CheckItem;
import com.itheima.pojo.Setmeal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: bowen
 * @Date: 2019/7/14 16:52
 * @Description:
 */
@Service(interfaceClass = SetmealService.class)
@Transactional
public class SetmealServiceImpl implements SetmealService {

	@Autowired
	SetmealDao setmealDao;

	@Autowired
	CheckGroupDao checkGroupDao;

	@Autowired
	CheckitemDao checkitemDao;


	@Autowired
	JedisPool jedisPool;


	@Override
	public void add(Setmeal setmeal, Integer[] checkgroupIds) {
	//	新增基本信息
		setmealDao.add(setmeal);
		Integer id = setmeal.getId();
		//	新增勾选信息
		if(checkgroupIds != null && checkgroupIds.length > 0){
			for (Integer checkgroupId : checkgroupIds) {
				Map map = new HashMap();
				map.put("checkgroupId",checkgroupId);
				map.put("setmealId",id);
				setmealDao.addRelationsBetweenCheckGroupAndSetmeal(map);
			}
			
		}
	//	将套餐的图片保存到redis，SETMEAL_PIC_DB_RESOURCES
		jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES,setmeal.getImg());

	//	if(!CollectionUtils.isEmpty(Arrays.asList(checkgroupIds))){
	//		
	//	}
		

	}

	/**
	 *  @描述：分页
	 */
	public PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {

		PageHelper.startPage(currentPage,pageSize );
		Page<Setmeal> setmeals = setmealDao.findPage(queryString);

		return new PageResult(setmeals.getTotal(),setmeals.getResult() );
	}

	/**
	 *  @描述：获取套餐列表
	 */
	public List<Setmeal> findAllSetmeals() {
		return setmealDao.findAllSetmeals();
	}

	/**
	 *  @描述：根据套餐ID查询套餐详情（1.套餐的基本信息    2.检查组列表  3.检查项信息）
	 */
	public Setmeal findById(Integer id) {
		// 查询套餐的基本信息
		Setmeal setmeal = setmealDao.findById(id);
		// 查询套餐关联的检查组信息
		List<CheckGroup> checkGroups = checkGroupDao.findCheckGroupsBySetmealId(id);
		// 遍历检查组列表，为每一个检查组查询所属检查项信息
		if(!CollectionUtils.isEmpty(checkGroups)){
			checkGroups.forEach(checkGroup -> {
			//	根据checkGroupId查询检查项目信息
				List<CheckItem> checkItems = checkitemDao.findCheckitemsByCheckGroupId(checkGroup.getId());
				checkGroup.setCheckItems(checkItems);
			});
		}
		setmeal.setCheckGroups(checkGroups);
		return setmeal;
	}

	/**
	 *  @描述：查询套餐数据
	 */
	public List<Map> findSetmealCount() {

		return setmealDao.findSetmealCount();
	}

	/**
	 *  @描述：根据套餐ID查询套餐详情（1.套餐的基本信息 2.检查组列表 3.检查项信息）
	 */
	public Setmeal findByIdBetter(Integer id) {
		// 查询套餐的基本信息
		return setmealDao.findByIdBetter(id);
	}
}
